/***
 * @Author: zxc
 * @Date: 2020-11-06 09:31:52
 * @LastEditTime: 2020-11-06 10:17:18
 * @LastEditors: zxc
 * @Description:单例模式的核心是确保只有一个实例，并提供全局访问。
 **/

/**
 * @Author: zxc
 * @Date: 2020-11-06 10:11:03
 * @func:简单的单例模式
 */

// var Singleton = function (name) {
//   this.name = name;
//   this.instance = null;
// };
// Singleton.prototype.getName = function () {
//   alert(this.name);
// };
// Singleton.getInstance = function (name) {
//   if (!this.instance) {
//     this.instance = new Singleton(name);
//   }
//   return this.instance;
// };
// var a = Singleton.getInstance("sven1");
// var b = Singleton.getInstance("sven2");
// alert(a === b); // true

// ------------------------------------------------

/**
 * @Author: zxc
 * @Date: 2020-11-06 10:11:03
 * @func:简单的单例模式-2
 */

// let Singleton  = function(name){
//   this.name = name
// }
// Singleton.prototype.getName = function(){
//   alert(this.name)
// }
// Singleton.getInstance = (function(){
//   let instance = null
//   return function(name){
//     if(!instance){
//       instance = new Singleton(name)
//     }
//     return instance
//   }
// })()
// let test = Singleton.getInstance('test')
// let test1 = Singleton.getInstance('test1')
// test.getName() //test
// test1.getName() //test


// ------------------------------------------------


/**
 * @Author: zxc
 * @Date: 2020-11-06 10:11:03
 * @func:透明的单例模式
 */

// let CreateDiv = (function(){
//   let instance;
//   let CreateDiv = function(html){
//     if(instance) return instance
//     this.html = html
//     this.init()
//     return instance = this
//   }
//   CreateDiv.prototype.init = function(){
//     let div = document.createElement('div')
//     div.innerHTML = this.html
//     document.body.appendChild(div)
//   }
//   return CreateDiv
// })()
// let a = new CreateDiv('bodya')
// let b = new CreateDiv('bodyb')
// console.log(a === b,a,b)


// ------------------------------------------------

/**
 * @Author: zxc
 * @Date: 2020-11-06 10:11:03
 * @func:使用代理的单例模式
 */

//  let CreateDiv = function(html){
//    this.html = html;
//    this.init()
//  }

//  CreateDiv.prototype.init = function(){
//    let div = document.createElement('div')
//    div.innerHTML = this.html
//    document.body.appendChild(div)
//  }

// let ProxySingletonCreateDiv = (function(){
//   let instance = null
//   return function(html){
//     if(!instance){
//       instance = new CreateDiv(html)
//     }
//     return instance
//   }
// })()
// a = ProxySingletonCreateDiv('body')
// b = ProxySingletonCreateDiv('body-bs')
// console.log(a,b,a===b)


// ---------------------------------------------

/**
 * @Author: zxc
 * @Date: 2020-11-06 10:28:51
 * @func:js中的单例模式
 */
// 闭包 /命名空间


// ----------------------------------------------

/**
 * @Author: zxc
 * @Date: 2020-11-06 10:50:03
 * @func:惰性单例 
 */
// let Singleton = function(name){
//   this.name = name
// }
//  Singleton.getInstance = (function(){
//    let instance = null
//    return function(name){
//      if(!instance){
//        instance = new Singleton(name)
//      }
//      return instance
//    }
//  })()